#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>

int main()
{
    printf("I am a process!, pid：%d\n", getpid());

    execl("/usr/bin/ls", "ls", "-a", "-l", NULL);//函数替换，去执行ls指令

    printf("hello linux!\n");
    printf("hello linux!\n");
    printf("hello linux!\n");
    printf("hello linux!\n");
    printf("hello linux!\n");
    return 0;
}
































/*
int main()
{
    printf("I am a child process!：pid：%d, ppid：%d\n", getpid(), getppid());
    exit(10);
    return 0;
}
*/


/*
 代码含义：通过fork创建子进程，实现5次打印，然后终止掉子进程，子进程便处于僵尸状态。同时父进程是处于等待状态的，在10秒后开始对子进程进行处理（也就是获取子进程的pid），处理结束，子进程退出。父进程此时再次等待10秒后退出。
 */

/*
int main() {
    pid_t id = fork();
    if(id == 0){
        int ret = 30;
        while(ret){
            printf("child[%d] is running：ret is %d\n", getpid(), ret);
            ret--;
            sleep(1);
        }
        exit(1);
    }
    //sleep(10);
    printf("father wait begin..\n");
    int status = 0;
    pid_t cur = waitpid(id, &status, 0);
    if(cur > 0){
        printf("father wait：%d success, status exit_code：%d, status exit_signal：%d\n", cur, (status >> 8)& 0xFF, status & 0x7F);
    }
    else{
        printf("father wait failed\n");
    }
    //sleep(10);
}
*/


/*
int main() {
    pid_t id = fork();
    if(id == 0){
        int ret = 3;
        while(ret){
            printf("child[%d] is running：ret is %d\n", getpid(), ret);
            ret--;
            sleep(1);
        }
        exit(1);
    }
    printf("father wait begin..\n");
    int status = 0;
    pid_t cur = waitpid(id, &status, 0);
    if(cur > 0){
        if(WIFEXITED(status)){//没有收到任何退出信号的
            //正常结束，获取对应的退出码
            printf("exit code：%d\n",WEXITSTATUS(status));
        }
        else{
            printf("error：get a signal！\n");
        }
    }
}
*/

//int main() {
//    pid_t id = fork();
//    if(id == 0){
//        int ret = 10;
//        while(ret){
//            printf("child[%d] is running：ret is %d\n", getpid(), ret);
//            ret--;
//            sleep(1);
//        }
//        exit(1);
//    }
//
//    int status = 0;
//    while(1){  
//        pid_t cur = waitpid(id, &status, WNOHANG);
//        if(cur == 0){
//            //子进程没有退出，但是waitpid等待是成功的，需要继续重复进行等待
//            printf("Do father things!\n");
//        }
//        else if(cur > 0){
//            //子进程退出了，waipid也成功了，获取到了对应的结果
//            printf("father wait：%d success, status exit_code：%d, status exit_signal：%d\n", cur, (status >> 8)& 0xFF, status & 0x7F);
//            break;
//        }
//        else{
//            //等待失败了
//            perror("waitpid");
//            break;
//        }
//        sleep(1);
//    }
//}

